/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.beans;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.cip.esymons.eventos.adapaters.RutaCarpetaReporte;
import org.cip.esymons.eventos.bc.EntregaCertificadoDelegate;
import org.cip.esymons.eventos.bc.FormatoCertificadoDelegate;
import org.cip.esymons.eventos.bc.PreEventoDelegate;
import org.cip.esymons.eventos.be.EntregaCertificado;
import org.cip.esymons.eventos.be.FormatoCertificado;
import org.cip.esymons.eventos.be.Preevento;

/**
 *
 * @author Lizardo Rios
 */
public class ReporteCertificadoEventosController {

    EntregaCertificadoDelegate delegadoEntregaCertificado;
    List<EntregaCertificado> listaEntregaCertificado;
    Integer eveCodigo;
    Integer forCodigo;

    /****************************** Constructor ******************************/
    public ReporteCertificadoEventosController() {
        listaEntregaCertificado= new ArrayList<EntregaCertificado>();
    }

    /************************** Setters and Getters **************************/
    public Integer getEveCodigo() {
        return eveCodigo;
    }
    public void setEveCodigo(Integer eveCodigo) {
        this.eveCodigo = eveCodigo;
    }

    public Integer getForCodigo() {
        return forCodigo;
    }

    public void setForCodigo(Integer forCodigo) {
        this.forCodigo = forCodigo;
    }

    public List<EntregaCertificado> getListaEntregaCertificado() {
        return listaEntregaCertificado;
    }

    public void setListaEntregaCertificado(List<EntregaCertificado> listaEntregaCertificado) {
        this.listaEntregaCertificado = listaEntregaCertificado;
    }

    public EntregaCertificadoDelegate getDelegadoEntregaCertificado() {
        return delegadoEntregaCertificado;
    }

    /******************************** Metodos ********************************/
    public String buscarEntregaCertficado() {
        try {
            delegadoEntregaCertificado = new EntregaCertificadoDelegate();
            eveCodigo = (eveCodigo == null) ? 0 : eveCodigo;
            forCodigo = (forCodigo == null) ? 0 : forCodigo;
            listaEntregaCertificado = delegadoEntregaCertificado.listarCertificadosV2(eveCodigo, forCodigo);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Error en el método buscarEntregaCertificado", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public String validarCodigoEvento() {
        eveCodigo = (eveCodigo == null) ? 0 : eveCodigo;
        return null;
    }

    @SuppressWarnings("static-access")
    //exporta reporte de eventos en pdf
    public String exportar() {
        try {
            RutaCarpetaReporte ruta = new RutaCarpetaReporte();
            String rutaJasper = "", rutaPDF = "";

            rutaJasper = ruta.getRutaReporte() + "rptCertificadoEventos.jasper";
            rutaPDF = ruta.getRutaPDF() + "rptCertificadoEventos.pdf";
            Map parametros = new HashMap();
            Preevento preevento = new Preevento();
            PreEventoDelegate delegadoPreevento = new PreEventoDelegate();
            eveCodigo = (eveCodigo != null) ? eveCodigo : 0;
            preevento = delegadoPreevento.findID(eveCodigo);
            if (preevento == null) {
                mostrarMensaje("ERROR: ", "En buscar evento para el reporte", FacesMessage.SEVERITY_ERROR);
                return null;
            }
            String nombreEvento = preevento.getPreNombre();
            String parte1="", parte2="", pedazo="", resto="";
            String []arreglo = nombreEvento.split(" ");
            int cantidad = arreglo.length;
            if (cantidad > 2) {
                parte1 = arreglo[0].toString();
                parte2 = arreglo[1].toString();
                for (int i=2; i<cantidad; i++) {
                    resto += arreglo[i].toString() + " ";
                }
                resto = resto.trim();
                pedazo = parte1 + " " + parte2;
            } else {
                pedazo = nombreEvento;
                resto = "";
            }
            parametros.put("pEvento1", pedazo);
            parametros.put("pEvento2", resto);

            File entrada = new File(rutaJasper);
            JasperPrint print;
            if (listaEntregaCertificado.size() > 0) {
                print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaEntregaCertificado));
                if (ruta.generarPDF(rutaPDF, print)) {}
            }
            
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Al generar el reporte", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public SelectItem[] getComboFormatoCertificados() {
        try {
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            //codigoEvento = 3; //borrar esta linea
            System.out.println("codigoEvento: " + eveCodigo);
            FormatoCertificadoDelegate delegadoFormatoCertificado = new FormatoCertificadoDelegate();
            List<FormatoCertificado> listaFormatos = delegadoFormatoCertificado.listarFormatosXEvento(eveCodigo);
            selects = new SelectItem[listaFormatos.size()];
            int cont = 0;
            for (FormatoCertificado formato : listaFormatos) {
                SelectItem item = new SelectItem(formato.getForCodigo(), formato.getForNombre());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen formatos certificados");
            selects[0] = item;
            return selects;
        }
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }
}
